===== SLIDE 1 ===== data Hive概述 Hive数据仓库工具 主讲:何永亚 湖南软件职业技术大学 ===== SLIDE 2 ===== hive概述 Hive技术的出现降低了大数据学习门槛,很多传统数据分析人员可以直接使用Hive进行了大数据分析,接下来先初步了解Hive的基本概念 为什么要用hive 湖南软件职业技术大学 ===== SLIDE 3 ===== hive概述 Hive在Hadoop生态系统中的位置 湖南软件职业技术大学 Hive利用HDFS来存储数据,利用MapReduce来查询分析数据,那么Hive与Hadoop之间的关系总结如下。 具有良好的扩展性,且能够实现与其他组件的集成开发。 对HQL查询语句的解释、优化、生成查询计划等过程均是由 Hive 完成的,而查询计划被转化为 MapReduce 任务之后需要运行在 Hadoop 集群之上。 Hive中的所有数据都存储在Hadoop分布式文件系统中。 Hive需要构建在Hadoop集群之上。 ===== SLIDE 4 ===== hive概述 Hive是构建在Hadoop之上的离线分析系统,主要用于存储和处理海量结构数据。这些海量结构化数据一般存储就在HDFS上,Hive可以将上面的数据映射到一张数据表,赋予数据一种表结构,同时Hive提供了丰富的类SQL(简称HQL)语言对表中的数据进行统计分析。 Hive定义 湖南软件职业技术大学 ===== SLIDE 5 ===== hive概述 Hive首先对HQL语言进行解析和转换,生成一系列MapReduce任务,然后再Hadoop集群上执行MapReduce任务完成对数据的处理。这样,不熟悉MapReduce的用户也能很方便地利用HQL语句对数据进行查询、分析、汇总。目前,Hive已经是一个非常成功的Apache项目,很多公司和组织都将Hive当做大数据仓库工具。 Hive定义 湖南软件职业技术大学 ===== SLIDE 6 ===== hive概述 Hive的诞生源于 Facebook 的日志分析需求,面对海量的结构化数据, Hive能够以较低的成本完成以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活且高效。后来Facebook将Hive开源给了 Apache,成为 Apache 的一个顶级项目,至此Hive在大数据应用方面得到了快速的发展和普及。 Hive产生的背景 湖南软件职业技术大学 ===== SLIDE 7 ===== hive概述 Hive的优缺点 湖南软件职业技术大学 01 Hive适合数据的批处理,解决了传统关系型数据库在海量数据处理上的瓶颈。 02 Hive构建在Hadoop之上,充分利用了集群的存储资源、计算资源。 03 hive的优点 04 Hive学习使用成本低,支持标准的SQL语法,这样就免去了编写MapReduce程序的过程,减少了开发成本。 具有良好的扩展性,且能够实现与其他组件的集成开发。 ===== SLIDE 8 ===== hive概述 Hive的优缺点 湖南软件职业技术大学 hive的缺点 01 02 03 HQL的表达能力依然有限,不支持迭代计算,有些复杂的运算用 HQL不易表达,还需要单独编写MapReduce来实现。 Hive的运行效率低、延迟高,这是因为Hive底层计算引擎默认为MapReduce,而MapReduce是离线计算框架。 Hive的调优比较困难,由于HQL语句最终会转换为MapReduce任务,所以Hive的调优还需要考虑MapReduce层面的优化。 ===== SLIDE 9 ===== Hive原理及架构 Hive是构建在Hadoop之上的sql引擎,它重用了Hadoop中的HDFS和MapReduce等。Hive是Hadoop生态中的重要组成部分,也是目前应用最广泛的SQL on Hadoop解决方案。 为什么要用hive 湖南软件职业技术大学 ===== SLIDE 10 ===== Hive原理及架构 Hive 是一种构建在Hadoop之上的数据仓库工具,可以使用HQL 语句对数据进行分析和查询,而Hive 的底层数据都存储在HDFS中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到指定的HDFS目录下。 Hive的设计原理 湖南软件职业技术大学 ===== SLIDE 11 ===== Hive原理及架构 hive的特点如下: Hive的设计原理 湖南软件职业技术大学 1 支持索引,加快数据查询。 2 3 不同的存储类型,例如,纯文本文件、HBase 中的文件。 3 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。 4 可以直接使用存储在Hadoop 文件系统中的数据。 5 内置大量用户自定义函数(user define function,简称UDF)来对时间、字符串进行操作,支持用户扩展UDF 函数来完成内置函数无法实现的操作。 6 HQL语句最终会被转换为MapReduce任务运行在Hadoop集群之上。 ===== SLIDE 12 ===== Hive原理及架构 Hive的体系结构 湖南软件职业技术大学 用户接口 用户接口主要有CLI,Client 和 WUI三个。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。 Thrift服务器 Thrift服务器是基于socket通讯,支持跨语言。Hive Thrift服务简化了在多编程语言中运行Hive的命令。绑定支持C++,Java,PHP,Python和Ruby语言。 Hive驱动引擎 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。 元数据库 Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如 mysql、derby。元数据包括:数据库信息,表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。 Hadoop集群 Hive的数据文件存储在HDFS中,大部分的查询由 MapReduce 完成。 ===== SLIDE 13 ===== Hive原理及架构 Hive的运行机制如图 Hive的运行机制 湖南软件职业技术大学 (1)用户通过用户接口连接hive,编写HQL语句。 (2)Hive解析查询并指定逻辑查询计划。 (3)Hive将查询转换成MapReduce作业。 (4)Hive在Hadoop上执行MapReduce作业。 ===== SLIDE 14 ===== Hive原理及架构 HQL转换为MapReduce作业的过程 Hive的运行机制 湖南软件职业技术大学 (1)通过开源语法分析器Antlr完成SQL解析,将SQL转化为抽象语法树(AST AbstractSyntaxTree)。 (2)遍历抽象语法树,生成查询的基本组成单元QueryBlock,是一个递归的过程,QueryBlock包括输入源、计算过程、输出,是一个子查询。 (3)遍历OueryBlock,翻译为执行操作树OperatorTree。 (4)对OperatorTree进行优化,如分桶Map端聚合、合并相关的操作、将过滤操作提前。 (5)遍历OperatorTree,翻译为MapReduce任务。 (6)进行物理层优化,生成最终的执行计划。 ===== SLIDE 15 ===== Hive原理及架构 Hive的基本数据类型 Hive的数据类型 湖南软件职业技术大学 ===== SLIDE 16 ===== Hive原理及架构 Hive的复杂数据类型 Hive的数据类型 湖南软件职业技术大学 ===== SLIDE 17 ===== Hive原理及架构 Hive的数据存储 湖南软件职业技术大学 表 Hive的表在逻辑上由存储的数据和描述表中数据形式的相关元数据组成。数据一般存放在HDFS中,但它也可以放在其他任何Hadoop文件系统中,包括本地文件系统或S3。Hive把元数据存放在关系型数据库中,而不是放在HDFS中。在Hive中创建表时,默认情况下Hive负责管理数据。这意味着Hive把数据移入它的“仓库目录”。另外一种选择是创建一个外部表(external table),这会让Hive到仓库目录以外的位置访问数据。 分区(Partition) Hive把表组织成分区。这是一种根据分区列(如日期)的值对表进行粗略划分的机制。使用分区可以加快数据分片的查询速度。以分区的常用情况为例,如日志文件的每条记录包含一个时间戳。如果我们根据日期来对它进行分区,那么同一天的记录就会被存放在同一个分区中。这样做的优点是:对于限制到某个或者某些特定日期的查询,它们的处理可以变得非常高效。因为它们只需要扫描查询范围内分区中的文件。注意,使用分区并不会影响大范围查询的执行,我们仍然可以查询跨多个分区的整个数据集。 分桶 表或者分区可以进一步分为桶。它会为数据提供额外的结构以获得更高效的查询处理。例如,通过用户ID来划分桶,我们可以在所有用户集合的随机样本上快速计算基于用户的查询。 ===== SLIDE 18 ===== data data 结束